


#include <stdio.h>


//#include <assert.h>
//#include <string.h>
//#include <ctype.h>
//#include <stdlib.h>
//// v1
// char* makeGood1(char* s)
// {
//     int sz = strlen(s);
//     char* ans = (char*)calloc(sz+1, sizeof(char));
//     assert(ans);
//
//     int i = 0, j = 0;
//     while (j < sz)
//     {
//         if ((islower(s[j]) && (s[j+1] == s[j] - 32)) ||
//             (isupper(s[j]) && (s[j+1] == s[j] + 32)))
//         {
//             j += 2;
//             if (j <= sz)
//                 ans[i++] = s[j++];
//         }
//         else
//         {
//             ans[i++] = s[j++];
//         }
//
//         if (i > 1)
//         {
//             if ((islower(ans[i - 1]) && (ans[i - 2] == ans[i - 1] - 32)) ||
//                 (isupper(ans[i - 1]) && (ans[i - 2] == ans[i - 1] + 32)))
//             {
//                 ans[i - 1] = ans[i - 2] = 0;
//                 i -= 2;
//             }
//         }
//     }
//
//     return ans;
// }
//
//// v2
//char* makeGood2(char* s)
//{
//    int i = 0, j = 1;
//    for (; j < strlen(s); ++j)
//    {
//        if (-1 == i || abs(s[i] - s[j]) != 32)
//            s[++i] = s[j];
//        else
//            --i;
//    }
//    s[i + 1] = 0;
//
//    return s;
//}
//
//int main()
//{
//    char* s = "jeSsEJ";
//
//    char* ret = makeGood1(s);
//    printf(ret);
//
//	return 0;
//}

struct TreeNode 
{
    int val;
    struct TreeNode* left;
    struct TreeNode* right;
    
};
typedef struct TreeNode TNode;

void _Sta(TNode* root, int a[])
{
    if (root == NULL)
        return;

    a[root->val]++;
    _Sta(root->left, a);
    _Sta(root->right, a);
}

int numColor(struct TreeNode* root)
{
    if (!(root->left || root->right))
    {
        return 1;
    }
    else
    {
        int a[1001] = { 0 };
        TNode* cur = root;
        _Sta(root, a);

        int cnt = 0;
        for (int i = 0; i < 1001; ++i)
        {
            if (a[i])
                ++cnt;
        }

        return cnt;
    }
}

int main()
{


    return 0;
}